package are.web;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet implementation class SrvUsuarios
 */
@WebServlet("/SrvUsuarios")
public class SrvUsuarios extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public SrvUsuarios() {
        super();
        // TODO Auto-generated constructor stub
    }

    
    protected void ProcesarPeticion(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		PrintWriter out = response.getWriter();

		String operacion = (String) request.getParameter("operacion");
		db conexion = null;

		/* Inicio operacion Agregar Usuario */

		if (operacion.equals("add")) { // agregar departamento
			String usuario = (String) request.getParameter("usuario");
			String nombre = (String) request.getParameter("nombre");
			String perfil = (String) request.getParameter("perfil");
			String clave = (String) request.getParameter("clave");
			String estado = (String) request.getParameter("estado");
			
			try {
				conexion = new db();
				Usuario user = new Usuario(usuario,nombre,perfil,estado,clave);
				ManejadorUsuario MU = new ManejadorUsuario(conexion,user);
				if (!MU.exist(user.getCodigo())) {
					if (MU.add()) {
						out.print("OK");
					}else {
						out.print("Error al procesar la solicitud");
					}
					
				}else {
					out.print("Usuario ya existe: " + user.getNombre());
				}
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				out.print("Error de conexion con el servidor: "
						+ e.getMessage());
			} finally {
				if (conexion != null) {
					try {
						conexion.Close();
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						out.print(e.getMessage());
					}
				}
			}

		}

		/* Fin operacion Agregar Usuario */

		if (operacion.equals("modify")) { // Update departamento
			String usuario = (String) request.getParameter("usuario");
			String key = (String) request.getParameter("key");
			String nombre = (String) request.getParameter("nombre");
			String perfil = (String) request.getParameter("perfil");
			String clave = (String) request.getParameter("clave");
			String estado = (String) request.getParameter("estado");
			
			try {
				conexion = new db();
				Usuario user = new Usuario(usuario,nombre,perfil,estado,clave);
				ManejadorUsuario MU = new ManejadorUsuario(conexion,user);
				if (MU.exist(user.getCodigo())) {
					if (MU.update(key)) {
						out.print("OK");
					}else {
						out.print("Error al procesar la solicitud");
					}
					
				}else {
					out.print("Usuario no existe: " + user.getNombre());
				}

			} catch (SQLException e) {
				// TODO Auto-generated catch block
				out.print("Error de conexion con el servidor: "
						+ e.getMessage());
			} finally {
				if (conexion != null) {
					try {
						conexion.Close();
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						out.print(e.getMessage());
					}
				}
			}

		}

		
		/* Inicio operacion listar departamentos */
		if (operacion.equals("list")) {
			try {
				conexion = new db();
				ManejadorUsuario MU = new ManejadorUsuario(conexion);
				ArrayList<Usuario> users = MU.list(ManejadorUsuario.ORDER_NOMBRE);

					out.println("<h2>Listado Usuarios</h2>");
					out.println("<table>");
					out.println("<tr>");
					out.println("<th>Usuario</th>");
					out.println("<th>Nombre</th>");
					out.println("<th>Perfil</th>");
					out.println("<th>Activo?</th>");
					out.println("<th></th>");
					out.println("</tr>");
					int fila=1;
					for (Usuario user : users)
					{
						out.println("<tr " + (fila%2==0?"class='odd'":"") + ">");
						out.println("<td>" + user.getCodigo() + "</td>");
						out.println("<td>" + user.getNombre() + "</td>");
						out.println("<td>" + user.getPerfil() + "</td>");
						out.println("<td>" + (user.getEstado().equals("1")?"Si":"No") + "</td>");
						out.println("<td>");
						out.print("<a href=\"mod_usuario.jsp?menu=5&codigo="
								+ user.getCodigo()
								+ "\">Modificar</a>     <a href=\"javascript:remove('" 
								+ user.getCodigo() 
								+ "')\">Eliminar</a>     <a href=\"javascript:CambiarPassword('" 
								+ user.getCodigo() +"')\">Cambiar clave</a>");
						out.println("</td>");
						out.println("</tr>");
						fila++;
					} 
					out.println("<tr>");
					out.println("<td colspan='5'>Total Usuarios: " + users.size() +"</td>");
					out.println("</tr>");
					out.println("</table>");
				

			} catch (SQLException e) {
				// TODO Auto-generated catch block
				out.print(e.getMessage());
			} finally {
				if (conexion != null) {
					try {
						conexion.Close();
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						out.print(e.getMessage());
					}
				}
			}
			/* Fin operacion listar departamentos */

		}
		
		
		if (operacion.equals("changepassword")) {
			String user = (String)request.getParameter("usuario");
			String clave = (String)request.getParameter("clave");
			try {
				conexion = new db();
				ManejadorUsuario MU = new ManejadorUsuario(conexion);
				if (MU.exist(user)) {
					if (MU.changepassword(user, clave)) {
						out.print("OK");
					}else {
						out.print("Error al procesar la solicitud");
					}
				}else {
					out.print("Usuario no encontrado");
				}
				
				
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				out.print(e.getMessage());
			} finally {
				if (conexion != null) {
					try {
						conexion.Close();
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						out.print(e.getMessage());
					}
				}
			}
		}
		
		if (operacion.equals("login")) {
			String user = (String)request.getParameter("usuario");
			String clave = (String)request.getParameter("clave");
			try {
				conexion = new db();
				ManejadorUsuario MU = new ManejadorUsuario(conexion);
				if (MU.exist(user)) {
					if (MU.login(user, clave)) {
						Usuario us = MU.getUser();
						// Registrar el usuario en la sesion
						HttpSession sesion = request.getSession();
						sesion.setAttribute("usuario",us.getCodigo());
						sesion.setAttribute("perfil", us.getPerfil());
						
						out.print("OK");
					}else {
						out.print("Error de autenticacion");
					}
				}else {
					out.print("Usuario no encontrado");
				}
				
				
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				out.print(e.getMessage());
			} finally {
				if (conexion != null) {
					try {
						conexion.Close();
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						out.print(e.getMessage());
					}
				}
			}
		}
		
		
		
		
		out.close();
	}
	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		this.ProcesarPeticion(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		this.ProcesarPeticion(request, response);
	}

}
